package com.yt.dubbo.exception;

import com.alibaba.fastjson.JSON;
import com.yt.common.constant.CommonParameter;
import com.yt.common.enums.CodeEnum;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.rpc.RpcException;

/**
 * @Description:
 * @Author: mxli
 * @Date: 2020-12-20 22:12
 **/
@Data
@Slf4j
public class ServiceException extends RpcException {
    private int code;

    /**
     * 使用已有的错误类型
     *
     * @param codeEnum 枚举类中的错误类型
     */
    public ServiceException(CodeEnum codeEnum) {
        super(codeEnum.getMsg());
        this.code = codeEnum.getCode();
    }

    /**
     * 使用已有的错误类型
     *
     * @param codeEnum 枚举类中的错误类型
     */
    public ServiceException(CodeEnum codeEnum, Object... message) {
        super(codeEnum.getMsg());
        this.code = codeEnum.getCode();
        log.error("自定义异常：" + code + ":" + codeEnum.getMsg() + ": 接口请求====>" + JSON.toJSONString(CommonParameter.getHeadParamsBO()) + "-----方法参数-----" + JSON.toJSONString(message), this);
    }

    /**
     * 使用已有的错误类型
     *
     * @param codeEnum 枚举类中的错误类型
     */
    public ServiceException(CodeEnum codeEnum, Exception e, Object... message) {
        super(codeEnum.getMsg());
        this.code = codeEnum.getCode();
        log.error("自定义异常：" + code + ":" + codeEnum.getMsg() + ": 接口请求====>" + JSON.toJSONString(CommonParameter.getHeadParamsBO()) + "-----方法参数-----" + JSON.toJSONString(message), e);
    }

    /**
     * 自定义错误类型
     *
     * @param code 自定义的错误码
     * @param msg  自定义的错误提示
     */
    public ServiceException(int code, String msg) {
        super(msg);
        this.code = code;
    }

    /**
     * 自定义错误类型
     *
     * @param code 自定义的错误码
     * @param msg  自定义的错误提示
     */
    public ServiceException(int code, String msg, Object... message) {
        super(msg);
        this.code = code;
        log.error("自定义异常：" + code + ":" + msg + ": 接口请求====>" + JSON.toJSONString(CommonParameter.getHeadParamsBO()) + "-----方法参数-----" + JSON.toJSONString(message), this);
    }
}
